/*
 * Copyright 2017 The Netty Project
 *
 * The Netty Project licenses this file to you under the Apache License,
 * version 2.0 (the "License"); you may not use this file except in compliance
 * with the License. You may obtain a copy of the License at:
 *
 *   http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 * License for the specific language governing permissions and limitations
 * under the License.
 */

package py.netty.core.nio;

import java.io.IOException;
import java.nio.channels.SelectionKey;
import java.nio.channels.Selector;
import java.nio.channels.spi.SelectorProvider;
import java.util.Set;

final class SelectedSelectionKeySetSelector extends Selector {
  private final SelectedSelectionKeySet selectionKeys;
  private final Selector delegate;

  SelectedSelectionKeySetSelector(Selector delegate, SelectedSelectionKeySet selectionKeys) {
    this.delegate = delegate;
    this.selectionKeys = selectionKeys;
  }

  @Override
  public boolean isOpen() {
    return delegate.isOpen();
  }

  @Override
  public SelectorProvider provider() {
    return delegate.provider();
  }

  @Override
  public Set<SelectionKey> keys() {
    return delegate.keys();
  }

  @Override
  public Set<SelectionKey> selectedKeys() {
    return delegate.selectedKeys();
  }

  @Override
  public int selectNow() throws IOException {
    selectionKeys.reset();
    return delegate.selectNow();
  }

  @Override
  public int select(long timeout) throws IOException {
    selectionKeys.reset();
    return delegate.select(timeout);
  }

  @Override
  public int select() throws IOException {
    selectionKeys.reset();
    return delegate.select();
  }

  @Override
  public Selector wakeup() {
    return delegate.wakeup();
  }

  @Override
  public void close() throws IOException {
    delegate.close();
  }
}
